package com.dd.cloud.user.service.admin;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.cloud.user.entity.admin.AdminUser;
import com.dd.cloud.user.req.admin.AddAdminUserReq;
import com.dd.cloud.user.req.admin.GetAdminPageReq;
import com.dd.cloud.user.req.admin.StatisticalMechanDateNodeReq;
import com.dd.cloud.user.req.admin.UpdateAdminUserReq;
import com.dd.cloud.user.req.mechan.MechanRankPresStatisticalReq;
import com.dd.cloud.user.req.mechan.MechanRankSelectStatisticalReq;
import com.dd.cloud.user.res.admin.*;
import com.dd.cloud.user.res.mechan.MechanRankPresRes;
import com.dd.cloud.user.res.mechan.MechanRankSelectRes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 管理员用户 服务类
 * </p>
 *
 * @author czg
 * @since 2022-04-27
 */
public interface IAdminUserService extends IService<AdminUser> {

    /**
     * 机构管理员用户登录 验证码
     *
     * @param request
     * @param response
     * @param phone
     * @param code
     * @return
     */
    AdminUserRes adminUserLoginCode(HttpServletRequest request, HttpServletResponse response,
                                    String phone, String code);

    /**
     * 运营管理员用户登录 密码
     *
     * @param request
     * @param response
     * @param account
     * @param password
     * @return
     */
    AdminUserRes adminUserLoginPwd(HttpServletRequest request, HttpServletResponse response,
                                   String account, String password);


    /**
     * 运营管理员用户修改密码
     *
     * @param oldPwd
     * @param newPwd1
     * @param newPwd2
     */
    void adminUserPwd(String oldPwd, String newPwd1, String newPwd2);

    /**
     * 添加运营管理员
     *
     * @param req
     */
    void addAdminUser(AddAdminUserReq req);

    /**
     * 查询管理员详情
     *
     * @param id
     * @return
     */
    AdminUserDetailRes getAdminUserDetail(Integer id);

    /**
     * 修改运营管理员
     *
     * @param req
     */
    void updateAdminUser(UpdateAdminUserReq req);

    /**
     * 修改运营管理员状态
     *
     * @param id
     * @param status
     */
    void updateAdminUserStatus(Integer id, Integer status);

    /**
     * 查询管理员列表
     *
     * @param req
     * @return
     */
    Page<AdminUserRes> getAdminUserPage(GetAdminPageReq req);

    /**
     * 确认手机号是否使用
     *
     * @param phone
     * @return
     */
    boolean checkPhoneUsed(String phone);

    /**
     * 下载系统模板文件
     *
     * @param response
     * @param type
     */
    void resourceDownload(HttpServletResponse response, Integer type);

    /**
     * 获取统计用户数量
     *
     * @return
     */
    StatisticalUserNumRes getStatisticalUserNum();

    /**
     * 统计机构省份地址和医生数量
     *
     * @return
     */
    Map<String, List<StatisticalMechanAddrRes>> getStatisticalMechanAddr();

    /**
     * 查询各地区的机构数量占比
     *
     * @return
     */
    List<StatisticalMechanRegionRes> getStatisticalMechanRegion();

    /**
     * 统计机构开方数量及总数量
     *
     * @param timeType
     * @return
     */
    List<StatisticalMechanPresRes> getStatisticalMechanPres(String timeType);

    /**
     * 查询机构类型数量占比
     *
     * @return
     */
    List<StatisticalMechanTypeRes> getStatisticalMechanType();

    /**
     * 查询各个时间维度的机构处方数量
     *
     * @return
     */
    List<StatisticalNodeRes> getStatisticalMechanDateNode(StatisticalMechanDateNodeReq req);

    /**
     * 获取机构选择列表
     *
     * @param req
     * @return
     */
    List<MechanRankSelectRes> getMechanSelect(MechanRankSelectStatisticalReq req);


    /**
     * 获取机构处方图表数据
     *
     * @param req
     * @return
     */
    List<MechanRankPresRes> getMechanPresDay(MechanRankPresStatisticalReq req);

    /**
     * 查询管理员类型
     *
     * @param userId
     * @return
     */
    Integer getAdminUserType(Integer userId);

    /**
     * 重置管理员密码
     *
     * @param adminId
     */
    void resetAdminUserPassword(Integer adminId);
}
